# 一、定义一个学生Student类。有下面的类属性：
# 1 姓名 name
# 2 年龄 age
# 3 成绩 score（语文，数学，英语) [每课成绩的类型为整数]
# 类方法：
# 1 获取学生的姓名：get_name() 返回类型:str
# 2 获取学生的年龄：get_age() 返回类型:int
# 3 返回3门科目中最高的分数。get_course() 返回类型:int
# 4 将每个实例学生对象写进txt文件里，要持久保存
# 举例：{"姓名":"a","年龄":29,"成绩":{"语文":99,"数学":100,"英语":85}
# 5 获取所有学生的信息
# 写好类以后，可以定义2个同学测试下:
# zm = Student('zhangming',20,[69,88,100])
"""
class Student:
    def __init__(self,name,age,score):
        self.name = name
        self.age = age
        self.score = score
    def get_name(self):
        return self.name
    def get_age(self):
        return self.age
    def get_course(self):
        return max(self.score)
    def get_student(self):
         with open("stu1121.txt","a",encoding="utf-8") as f:
             f.write(str({"姓名": self.name, "年龄": self.age, "成绩":{"语文": self.score[0],"数学": self.score[1],"英语": self.score[2]}})+"\n")
    def get_all_student(self):
        with open("stu1121.txt", "r", encoding="utf-8") as f:
            a = f.read()
            print(a)
zm = Student('江',99,[1,2,11])
zy = Student('张墉',18,[100,100,100])
zm.get_student()
zy.get_student()
zy.get_all_student()

# print(zm.get_name(),zm.get_age(),zm.get_course())
# print(zy.get_name(),zy.get_age(),zy.get_course())
"""
"""
class Student():
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score
        with open("studnet.txt",'a',encoding='utf-8') as f:
            f.write(f"姓名:{self.name} 年龄:{self.age} 成绩:{self.score}")
    def course(self):
        print('course')

    def get_name(self):
        return self.name

    def get_age(self):
        return self.age
    def get_course(self):
        return max(self.score)


zm = Student('zhangming',20,[69,88,100])
print(zm.get_name())
print(zm.get_age())
print(zm.get_course())
"""
# 二、定义一个字典类：dictclass。完成下面的功能：
# 1 删除某个key
# 2 判断某个键是否在字典里，如果在返回键对应的值，不存在则返回"not found"
# 3 返回键组成的列表：返回类型;(list)
# 4 合并字典，并且返回合并后字典的values组成的列表。返回类型:(list)
"""
class Dictclass: #类首字母大写
    def __init__(self,my_dict):
        self.my_dict = my_dict

    def delete_key(self,key):
        if key in self.my_dict:#检查要删除的键是否在字典中
            del self.my_dict[key]#如果键存在于字典中，则使用 del 关键字从字典中删除该键。
            return "删除成功"
        else:
            return "删除失败"

    def find_key(self,key):
        return self.my_dict.get(key,"not found")#使用 get() 方法来检索给定键的值。如果键存在，则返回对应的值；如果键不存在，则返回指定的默认值

    def get_keys(self):
        return list(self.my_dict.keys())#使用 keys() 方法获取字典中所有键，并通过 list() 转换为列表后返回。

    def x(self, other_dict):
        self.my_dict.update(other_dict)
        return list(self.my_dict.values())

my_dict= {"a":1,"b":2,"c":3,"d":4,"e":5}
bb = Dictclass(my_dict)
print(bb.delete_key("b"))  #删除某个key
print(bb.find_key("g"))#判断某个键是否在字典里
print(bb.get_keys())# 返回键组成的列表
other_dict = {"f":6,"g":8,"h":0}
print(bb.x(other_dict))
"""
# 四、定义一个列表的操作类：Listinfo
# 包括的方法:
# 1 列表元素添加: add_key(keyname) [keyname:字符串或者整数类型]
# 2 列表元素取值：get_key(num) [num:整数类型]
# 3 列表合并：update_list(list) [list:列表类型]
# 4 删除并且返回最后一个元素：del_key()
class Listinfo:
    def __init__(self,list1):
        self.list1=[]
    def add_key(self,keyname):
        self.list1.append(keyname)
    def get_key(self,num):
        if type(num) == int:
            return int(self.num)


#  五、做一个学生点名系统，系统里支持：存入学生、更改学生、删除学生、点到学生姓名方法
# 存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
# 更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
# 删除学生：删除的学生将不在展示
# 展示全部学生：可以看到全部的学生姓名
# 学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！

# 六、点餐管理系统
# 1》、餐馆可以新增菜品、下架菜品、修改菜品
# 2》、每个菜品，都有对应的库存，所有菜品的库存均为999，每出一道菜，库存-1
# 菜品有对应的价格，餐厅老板定义价格每道菜不允许超过15元，没有小数单位，均为整数
# 3》、餐馆后台有点赞系统，能够收集客户对菜品的喜好，0~5分
# 4》、有菜品评分提报功能，对平均分数（菜品总分/打分人数）低于3分的菜品进行强制下架；

#  七、定义一个桌子类（Desk），包含长（length）、宽（width）、高（height）属性，
# 包含一个打印桌子信息属性的方法（showInfo）。实例化2个桌子对象，为其赋予不同的属性值，
# 并调用showInfo方法，输出每个桌子的信息。
"""
class Desk:
    def __init__(self,length,width,height):
        self.length = length
        self.width = width
        self.height = height
    def showInfo(self):
        print(f"桌子的长度为{self.length},桌子的宽度为{self.width},桌子的厚度为{self.height}")
Desk1 = Desk(100, 50, 75)
Desk2 = Desk(80, 60, 85)
Desk1.showInfo()
Desk2.showInfo()
"""
# 八、定义一个用户类(User),用户名(username)和密码(password)是这个类的属性。

# 九、定义一个计算器类，有加减乘除四个方法
"""
class Com:
    def __init__(self,a,b):
        self.a=a
        self.b=b
    def jia(self):
        return self.a + self.b
    def jian(self):
        return self.a - self.b
    def cheng(self):
        return self.a * self.b
    def chu(self):
        return self.a / self.b
c = Com(15,3)
print(c.jia(),c.jian(),c.cheng(),c.chu())
"""
# 十、创建一个名为Person的类，具有以下属性和方法：
# 属性：name（姓名），age（年龄）
# 方法：greet()，打印出一句问候语，包括该人的姓名和年龄
"""
class Person:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def greet(self):
        print(f"你好，{self.name},{self.age}岁的老登")
a = Person("ZZ",19)
a.greet()
"""
# 十一、定义一个图书管理系统类，图书可以新增、修改、删除，要求新增的每个图书都加到txt文本里，数据持久化
# 新增：图书名、作者名称、新建年月日
# 修改：图书名、作者名称、新建年月日
# 删除：图书删掉，且不在展示
# 查看：全量查询，精确查询，需要用户传入形参来控制返回结果

# 十二、创建一个名为"Car"的类，该类具有"品牌"和"颜色"属性。
# 创建一个"start_engine"方法，该方法打印出"启动汽车引擎！"的消息。
# 创建一个"stop_engine"方法，该方法打印出"关闭汽车引擎！"的消息
"""
class Car:
    def __init__(self,pp,ys):
        self.pp = pp
        self.ys = ys
    def start_engine(self):
        print("启动汽车引擎！")
    def stop_engine(self):
        print("关闭汽车引擎！")

"""
# 十三、淘宝商家后台，可以上架商品、下架商品，功能如下：
#  （1） 可以添加商品，商家添加完的商品会存到商品列表
#  1.1  商品要有名称、sku、价格
#  （2） 可以修改商品信息：名称、sku、价格
#  （3） 可以对商品进行下架，下架后的商品不再展示
"""
class MerchantBackend:
    def __init__(self):
        self.commodity = {}
    def add_commodity(self,name,sku,price):
        self.commodity.update({name:{"商品规格":sku,"商品价格":price}})
        return 1
    def update_commodity(self,old_name,new_name,sku,price):
        if old_name in self.commodity.keys():
            self.commodity.update({new_name: {"商品规格": sku, "商品价格": price}})
            self.commodity.pop(old_name)
            return 1
        else:
            return f"没有这个商品，无法修改！"
    def delete_commodity(self,name):
        if name in self.commodity.keys():
            try:
                for key in self.commodity.keys():
                    if name in key:
                        self.commodity.pop(name)
            except:
                return "删除商品成功！"
        else:
            return "没有这个商品，无法删除！"
    def show_commodity(self):
        num = 0
        for i in self.commodity.keys():
            num+=1
            print(f"第{num}件商品的名称为：{i},商品的规格为：{self.commodity[i]['商品规格']} ， 商品的价格为：{self.commodity[i]['商品价格']} 人民币/元")
        """


class TaobaoStore:
    def __init__(self):
        self.product_list = []

    def add_product(self, name, sku, price,id):
        TaobaoStore.id +=1
        product = {'id': id, 'name': name, 'sku': sku, 'price': price, 'status': '上架'}
        self.product_list.append(product)
        print(f'商品 {name} 添加成功！')

    def modify_product(self, sku, new_name=None, new_price=None):
        for product in self.product_list:
            if product['sku'] == sku:
                if new_name:
                    product['name'] = new_name
                if new_price:
                    product['price'] = new_price
                    print(f'商品 {sku} 信息修改成功！')
                    return
            print(f'找不到SKU为 {sku} 的商品！')

    def take_off_product(self, sku):
        for product in self.product_list:
            if product['sku'] == sku:
                product['status'] = '下架'
                print(f'商品 {sku} 已下架！')
                return
            print(f'找不到SKU为 {sku} 的商品！')

    def display_products(self):
        print("商品列表:")
        for product in self.product_list:
            print(f"名称: {product['name']}, SKU: {product['sku']}, 价格: {product['price']}, 状态: {product['status']}")


taobao_store = TaobaoStore()

taobao_store.add_product('手机', 'SKU001', 1999.99)
taobao_store.add_product('电脑', 'SKU002', 4999.99)
taobao_store.add_product('耳机', 'SKU003', 199.99)

taobao_store.display_products()

taobao_store.modify_product('SKU001', new_name='新手机', new_price=2299.99)
taobao_store.take_off_product('SKU002')

taobao_store.display_products()

# 十四、定义一个人类
# 1.小明和小美都爱跑步
# 2.小美体重45.0公斤
# 3.小明体重75.0公斤
# 4.每次跑步都会减少0.5公斤
# 5.每次吃东西都会增加1公斤
"""
class Ren:
    def __init__(self,name,tzhong):
        self.name=name
        self.tzhong=tzhong
    def run(self):
        self.tzhong -= 0.5
    def eat(self):
        self.tzhong +=1
xiaoming = Ren("小明", 75.0)
xiaomei = Ren("小美",45.0)
xiaoming.run()
xiaomei.run()
print(f"{xiaoming.name}跑步后体重为：{xiaoming.tzhong}")
print(f"{xiaomei.name}跑步后体重为：{xiaomei.tzhong}")
xiaoming.eat()
xiaomei.eat()
print(f"{xiaoming.name}吃饭后体重为：{xiaoming.tzhong}")
print(f"{xiaomei.name}吃饭后体重为：{xiaomei.tzhong}")
"""

# 十五、士兵瑞恩有一把ak47
# 士兵可以开火（开火扣动的是扳机）
# 枪能够发射子弹（把子弹打出去）
# 抢能够装子弹–增加子弹数量
# 要求没子弹，需要输出没有子弹了，且发射失败
"""
class Ryan:
    def __init__(self):
        self.bulletlist = 25
        self.nowbullet = 0
    def Ammunition(self):
        if self.bulletlist >= 5:
            self.nowbullet +=5
            self.bulletlist -=5
        else:
            print("弹药不足，添加失败！")
    def openfire(self,bullet): # bullet：子弹
        if self.nowbullet:
            if self.nowbullet >= bullet:
                self.nowbullet -=bullet
                print(f"发射成功！")
            else:
                print(f"发射失败，弹药不足")
"""